package model

import (
	"gopkg.in/mgo.v2"
	"labix.org/v2/mgo/bson"
)

//接收消息体
type MessageItem struct {
	MType    int      `json:"type"     bson:"type"`    //消息类型 1 系统消息  2 群聊消息  3 私聊消息  4 系统操作
	Message  string   `json:"msg"      bson:"msg"`     //消息内容
	From     int      `json:"from"     bson:"from"`    // 发送人
	To       int      `json:"tofrom"   bson:"tofrom"`  //接收的对象 id
	ToTime   int64    `json:"totime"   bson:"totime"`  //发送时间
	IsRead   int      `json:"is_read"  bson:"is_read"` //已读状态  0未读  1已读
	UserInfo UserInfo `json:"userInfo" bson:"userInfo"`
}

//新增聊天记录
func (messageItem *MessageItem) MessageItemInsert(mgo *mgo.Collection) error {
	messageItem.IsRead = 0
	err := mgo.Insert(&messageItem)
	return err
}

//分页聊天记录¬
func (messageItem *MessageItem) SelectMessageItemUserIdList(mgo *mgo.Collection, page int, pageSize int) ([]MessageItem, int, error, error) {
	var messageItemList []MessageItem
	var messageItemList1 []MessageItem
	amount, _ := mgo.Find(bson.M{"tofrom": messageItem.To, "from": messageItem.From}).Sort("-totime").Count()
	amount1, _ := mgo.Find(bson.M{"tofrom": messageItem.From, "from": messageItem.To}).Sort("-totime").Count()
	err1 := mgo.Find(bson.M{"tofrom": messageItem.To, "from": messageItem.From}).Sort("-totime").Skip((page - 1) * pageSize / 2).Limit(pageSize).All(&messageItemList)
	err2 := mgo.Find(bson.M{"tofrom": messageItem.From, "from": messageItem.To}).Sort("-totime").Skip((page - 1) * pageSize / 2).Limit(pageSize).All(&messageItemList1)
	messageItemList = append(messageItemList, messageItemList1...)
	return messageItemList, amount1 + amount, err1, err2
}

//查询最新的聊天记录一条
func (messageItem *MessageItem) SelectNewMessageItem(mgo *mgo.Collection) MessageItem {
	var messageItem2 MessageItem
	var messageItem1 MessageItem
	//两个查询互换角色，查聊天记录
	mgo.Find(bson.M{"tofrom": messageItem.To, "from": messageItem.From}).Sort("-totime").Limit(1).One(&messageItem1)
	mgo.Find(bson.M{"tofrom": messageItem.From, "from": messageItem.To}).Sort("-totime").Limit(1).One(&messageItem2)
	//根据时间是否有值来判断是否能查到
	if messageItem1.ToTime == 0 {
		return messageItem2
	}
	if messageItem2.ToTime == 0 {
		return messageItem1
	}
	if messageItem1.ToTime > messageItem2.ToTime {
		return messageItem1
	} else {
		return messageItem2
	}

}
